home *** CD-ROM | disk | FTP | other *** search
- #include "korg.hpp"
- #include <string.h>
-
- static char* korgid = "KORG";
-
- int pcgheader(FILE*f, PCGHEAD &pcghead)
- {
- if (!f)
- return 0;
- fseek(f, 0L,SEEK_SET);
- if (fread(&pcghead, 1, sizeof(PCGHEAD), f) != sizeof(PCGHEAD) || strncmp(pcghead.korg, korgid, strlen(korgid)) != 0)
- return 0;
- return 1;
- }
-
- int styheader(FILE* f, STYHEAD & styhead)
- {
- if (!f)
- return 0;
- fseek(f, 0L,SEEK_SET);
- if (fread(&styhead, 1, sizeof(STYHEAD), f) != sizeof(STYHEAD) || strncmp(styhead.korg, korgid, strlen(korgid)) != 0)
- return 0;
- return 1;
- }
-
- int read_korgname(FILE* f, char* s)
- {
- if (fread(s, KORGNAME_SIZE, 1, f) != 1)
- return 0;
- s[KORGNAME_SIZE] = '\0';
- return 1;
- }
-
-
- int arrheader(FILE* f, ARRHEAD & arrhead)
- {
- if (!f)
- return 0;
- fseek(f, 0L,SEEK_SET);
- if (fread(&arrhead, 1, sizeof(ARRHEAD), f) != sizeof(ARRHEAD) || strncmp(arrhead.korg, korgid, strlen(korgid)) != 0)
- return 0;
- return 1;
- }
-
- int bsqheader(FILE* f, BSQHEAD & bsqhead)
- {
- if (!f)
- return 0;
- fseek(f, 0L,SEEK_SET);
- if (fread(&bsqhead, 1, sizeof(BSQHEAD), f) != sizeof(BSQHEAD) || strncmp(bsqhead.korg, korgid, strlen(korgid)) != 0)
- return 0;
- return 1;
- }
-
- int sngheader(FILE* f, SNGHEAD & snghead)
- {
- if (!f)
- return 0;
- fseek(f, 0L,SEEK_SET);
- if (fread(&snghead, 1, sizeof(SNGHEAD), f) != sizeof(SNGHEAD) || strncmp(snghead.korg, korgid, strlen(korgid)) != 0)
- return 0;
- return 1;
- }
-
- void sngdefheader(SNGHEAD & head)
- {
- strncpy(head.korg, korgid, sizeof(head.korg));
- memset(&head.unknown, 0, sizeof(head.unknown));
- head.unknown[0] = '9';
- head.unknown[2] = 1;
- }
-
- void sngdefcontrol(SNGCTRL& ctrl)
- {
- int i;
-
- memset(&ctrl, 0, sizeof(ctrl));
- for (i = 0; i < 16; i++)
- {
- ctrl.channel[i] = i;
- ctrl.status[i].syncsrc = 3; // INT
- ctrl.status[i].mute = 0; // PLAY
- ctrl.bendrange[i] = 13;
- }
- ctrl.beat = 0x13; // 4/4
- ctrl.tempo = 90;
- ctrl.nextsong = 0x7F + 0x80; // OFF, autostart ON
- strncpy(ctrl.songtitle, "New Song ", sizeof(ctrl.songtitle));
- memcpy(&ctrl.effects, "\x01\x13\x64\x64\x64\x64\x44\x44\x3f\x12\x00\x1f\x3c\x3e\x00\xff\xfd\x00\x00\x63\x0a\x03\x00\x04\x04\x00\x00", sizeof(ctrl.effects));
- for (i = 0; i < 16; i++)
- {
- ctrl.trackctrl[i].prog = i+1;
- ctrl.trackctrl[i].outlevel = 127;
- ctrl.trackctrl[i].pan = 15; // CNT
- ctrl.trackctrl[i].sendlevel = 0x22; // C=2 D=2
- ctrl.trackctrl[i].key_wintop = 127;
- ctrl.trackctrl[i].key_winbottom = 0;
- ctrl.trackctrl[i].vel_wintop = 127;
- ctrl.trackctrl[i].vel_winbottom = 1;
- ctrl.trackctrl[i].ctrlfilter = 0x8F; //all ctrl changes
- ctrl.trackctrl[i].channel = i+1;
- }
- ctrl.metron_level = 99;
- ctrl.metron_pan = 1; // L14
- ctrl.metron_leadin = 2;
- }
-
- void sngdefpatctrl(PATCTRL & pat)
- {
- pat.beat = 0x13; // 1/4
- pat.len = 1;
- }
-
- void sngdefsong(SNG & sng)
- {
- unsigned* adrtab;
- for (int i = 0; i < 10; i++)
- sngdefcontrol(sng.sngctrl[i]);
- for (i = 0; i < 100; i++)
- sngdefpatctrl(sng.patctrl[i]);
- for (adrtab = (unsigned*)&sng.adr, i = 0; i <= 270; i++)
- *adrtab++ = 0x123c;
- }